MVVM (Model-View-ViewModel) প্যাটার্নে Validation হল এমন একটি প্রক্রিয়া যেখানে ব্যবহারকারীর ইনপুট ডেটা যাচাই করা হয়, যাতে অ্যাপ্লিকেশনটি সঠিক ডেটা প্রক্রিয়া করতে পারে। Validation Rules সাধারণত ViewModel বা Model-এ নির্ধারিত হয় এবং ইউজারের ইনপুট ডেটা সঠিক কিনা তা যাচাই করার জন্য ব্যবহৃত হয়। Custom Validation Logic ব্যবহারকারীর নির্দিষ্ট চাহিদা অনুসারে প্রক্রিয়া তৈরি করার জন্য ব্যবহৃত হয়, যেমন একটি নির্দিষ্ট ক্ষেত্রের জন্য কাস্টম নিয়ম তৈরি করা।
Validation Rules হল এমন নিয়ম যা ইনপুট ডেটা যাচাই করে দেখে, এটি সঠিক কিনা। MVVM প্যাটার্নে, এই validation সাধারণত ViewModel-এ পরিচালিত হয় এবং Binding এর মাধ্যমে View তে প্রয়োগ করা হয়। একাধিক প্রকারের ভ্যালিডেশন রুলস ব্যবহৃত হতে পারে, যেমন:
ধরা যাক, একটি ফর্মে ইউজার নাম এবং ইমেইল ইনপুট ফিল্ড রয়েছে এবং আমরা চাই যে:
public class UserViewModel : INotifyPropertyChanged
{
private string _username;
public string Username
{
get { return _username; }
set { _username = value; OnPropertyChanged(); }
}
public bool IsUsernameValid()
{
return !string.IsNullOrEmpty(Username);
}
}
public class UserViewModel : INotifyPropertyChanged
{
private string _email;
public string Email
{
get { return _email; }
set { _email = value; OnPropertyChanged(); }
}
public bool IsEmailValid()
{
var emailPattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
return Regex.IsMatch(Email, emailPattern);
}
}
এখানে, IsUsernameValid() এবং IsEmailValid() মেথডগুলি ব্যবহারকারীর ইনপুট যাচাই করবে।
Custom Validation Logic ব্যবহারকারীর চাহিদা অনুযায়ী তৈরি করা যেতে পারে, যা ডেটা যাচাই করার জন্য কাস্টম নিয়ম বা শর্ত নির্ধারণ করে। এটি সাধারণত complex validation প্রয়োজন যেখানে একাধিক শর্ত একসাথে প্রয়োগ করতে হয়।
ধরা যাক, একটি পাসওয়ার্ড ফিল্ড রয়েছে এবং আমরা চাই যে পাসওয়ার্ডটি অন্তত ৮টি অক্ষর, একটি বড় হাতের অক্ষর, একটি ছোট হাতের অক্ষর এবং একটি সংখ্যা থাকতে হবে।
public class UserViewModel : INotifyPropertyChanged
{
private string _password;
public string Password
{
get { return _password; }
set { _password = value; OnPropertyChanged(); }
}
public bool IsPasswordValid()
{
if (string.IsNullOrEmpty(Password))
{
return false;
}
bool hasUpper = Password.Any(char.IsUpper);
bool hasLower = Password.Any(char.IsLower);
bool hasDigit = Password.Any(char.IsDigit);
bool hasMinimumLength = Password.Length >= 8;
return hasUpper && hasLower && hasDigit && hasMinimumLength;
}
}
এখানে, IsPasswordValid() মেথডটি পাসওয়ার্ডে বিভিন্ন শর্ত যাচাই করে, যেমন বড় হাতের অক্ষর, ছোট হাতের অক্ষর, সংখ্যা এবং ন্যূনতম দৈর্ঘ্য।
MVVM প্যাটার্নে Data Binding এবং Validation একে অপরের সাথে কাজ করতে পারে। যখন View-এর Binding ভ্যালিডেশন মেথডের সাথে সংযুক্ত থাকে, তখন ব্যবহারকারীর ইনপুট যাচাই করা হয় এবং যদি তা ভুল হয় তবে ব্যবহারকারীকে সঠিকভাবে ইনপুট করার জন্য সতর্ক করা হয়।
<TextBox Text="{Binding Username, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding UsernameError}" Foreground="Red"/>
এখানে, TextBox এর Text প্রোপার্টি Username প্রোপার্টির সাথে বেঁধে দেওয়া হয়েছে এবং যদি কোন ত্রুটি ঘটে, তবে তা UsernameError এর মাধ্যমে প্রদর্শিত হবে।
INotifyDataErrorInfo ইন্টারফেসটি একটি ইন্টারফেস যা ডেটা ভ্যালিডেশন সম্পর্কিত ত্রুটির পরিচালনা করতে ব্যবহৃত হয়। এটি MVVM প্যাটার্নে ভ্যালিডেশন করতে বিশেষভাবে উপকারী, কারণ এটি ViewModel এ ত্রুটি তথ্য সরবরাহ করে এবং View তে ত্রুটি বার্তা প্রদর্শন করতে সক্ষম করে।
public class UserViewModel : INotifyDataErrorInfo
{
private string _username;
private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();
public string Username
{
get { return _username; }
set
{
_username = value;
ValidateUsername();
OnPropertyChanged();
}
}
private void ValidateUsername()
{
if (string.IsNullOrEmpty(Username))
{
AddError("Username", "Username is required.");
}
else
{
RemoveError("Username");
}
}
private void AddError(string propertyName, string error)
{
if (!_errors.ContainsKey(propertyName))
{
_errors[propertyName] = new List<string>();
}
_errors[propertyName].Add(error);
OnPropertyChanged(nameof(HasErrors));
}
private void RemoveError(string propertyName)
{
if (_errors.ContainsKey(propertyName))
{
_errors[propertyName].Clear();
OnPropertyChanged(nameof(HasErrors));
}
}
public bool HasErrors => _errors.Any();
public IEnumerable<string> GetErrors(string propertyName)
{
if (_errors.ContainsKey(propertyName))
{
return _errors[propertyName];
}
return null;
}
}
এখানে, INotifyDataErrorInfo ইন্টারফেসের GetErrors() মেথড ব্যবহার করে Username প্রোপার্টির জন্য ত্রুটি বার্তা ফেরত দেওয়া হচ্ছে।
Validation এবং Custom Validation Logic MVVM প্যাটার্নে একটি অত্যন্ত গুরুত্বপূর্ণ অংশ। ব্যবহারকারী ইনপুট যাচাই করার জন্য Validation Rules এবং Custom Validation এর মাধ্যমে অ্যাপ্লিকেশনটিকে আরো নিরাপদ এবং ব্যবহারকারী-বান্ধব করা সম্ভব। INotifyDataErrorInfo ইন্টারফেস ব্যবহার করে সেন্ট্রালাইজড এবং ইউনিফাইড ত্রুটি পরিচালনা সহজ হয়, যা UI তে ত্রুটি বার্তা প্রদর্শন করতে সহায়ক।
common.read_more